package com.qf.common.core.util;

/**
 * 天--道--酬--勤
 *
 * @author LiangGaoQiang
 * @ClassName DateFormatUtils
 * @Date: 2025/5/26 21:07
 * @Description: 描述
 */

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 日期格式化工具类
 * @author GaoQiangLiang
 */
public class DateFormatUtils {

    // 常用的日期格式
    public static final String DATE_PATTERN = "yyyy-MM-dd";
    public static final String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";

    /**
     * 将 Date 对象格式化为字符串
     *
     * @param date      需要格式化的日期
     * @param pattern   日期格式
     * @return          格式化后的字符串
     */
    public static String format(Date date, String pattern) {
        if (date == null) {
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        return sdf.format(date);
    }

    /**
     * 将字符串解析为 Date 对象
     *
     * @param str       需要解析的字符串
     * @param pattern   日期格式
     * @return          解析后的 Date 对象
     * @throws ParseException 如果解析失败
     */
    public static Date parse(String str, String pattern) throws ParseException {
        if (str == null || str.isEmpty()) {
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        return sdf.parse(str);
    }

    /**
     * 使用默认的日期格式（yyyy-MM-dd）进行格式化
     *
     * @param date  需要格式化的日期
     * @return      格式化后的字符串
     */
    public static String formatDate(Date date) {
        return format(date, DATE_PATTERN);
    }

    /**
     * 使用默认的日期时间格式（yyyy-MM-dd HH:mm:ss）进行格式化
     *
     * @param date  需要格式化的日期
     * @return      格式化后的字符串
     */
    public static String formatDateTime(Date date) {
        return format(date, DATETIME_PATTERN);
    }

    /**
     * 使用默认的日期格式（yyyy-MM-dd）进行解析
     *
     * @param str   需要解析的字符串
     * @return      解析后的 Date 对象
     * @throws ParseException 如果解析失败
     */
    public static Date parseDate(String str) throws ParseException {
        return parse(str, DATE_PATTERN);
    }

    /**
     * 使用默认的日期时间格式（yyyy-MM-dd HH:mm:ss）进行解析
     *
     * @param str   需要解析的字符串
     * @return      解析后的 Date 对象
     * @throws ParseException 如果解析失败
     */
    public static Date parseDateTime(String str) throws ParseException {
        return parse(str, DATETIME_PATTERN);
    }
}
